<?php
require_once(INCPATH . "core/ioc/applicationcontext.inc.php");
require_once(MODULESPATH . "accounts/accounts.inc.php");

/**
 * 账户系统数据层用户类的接口。
 */
interface IDUser extends IInjectEnable{
    /**
     * 向数据库中插入一条用户数据。
     * @param String $usr 用户登录名。
     * @param String $pwd 用户登录密码。
     * @param String $email 用户电子邮件。
     * @return 新增加的用户ID。
     */
    function insert($usr, $pwd, $email);
    
    /**
     * 删除指定的用户。
     * @param Int $uid 用户编号。
     */
    function deleteById($uid);
}

/**
 * 账户系统数据层外部账户映射类的接口。
 */
interface IDMapping extends IInjectEnable{
    /**
     * 根据外部映射账号，获取系统用户ID。
     * @param Int $mappingId 外部账号。
     * @param String $type 外部账户映射类型。
     * @return 系统用户ID(未获取到返回-1)。
     */
    function getUidByMapping($mappingId, $type);
    
    /**
     * 根据系统用户ID，获取外部映射账号。
     * @param Int $uid 外部账号。
     * @param String $type 外部账户映射类型。
     * @return 外部映射账号(未获取到返回-1)。
     */
    function getMappingByUid($uid, $type);
    
    /**
     * 添加映射关系。
     * @param Int $userId 系统用户ID。
     * @param Int $mappingId 外部账号。
     * @param String $type 外部账户映射类型。
     * @return 是否添加成功。
     */
    function insert($userId, $mappingId, $type);
    
    /**
     * 更新映射账号的使用时间。
     * @param Int $uid 用户编号。
     */
    function updateMappingTime($uid);
    
    /**
     * 删除指定用户的映射关系。
     * @param Int $uid 用户编号。
     */
    function deleteByUid($uid);
}

/**
 * 账户系统数据层用户首选项类的接口。
 */
interface IDPreference extends IAdjustUserData, IInjectEnable{
    /**
     * 设置用户的首先项。
     * @param Int $userId 系统用户ID。
     * @param String $key 首选项的键。
     * @param String $val 首选项的值。
     * @param String $type 用户首选项的类型。
     * @return 是否设置成功。
     */
    function setPreference($userId, $key, $val, $type);
    
    /**
     * 获取用户的首选项列表。
     * @param Int $userId 系统用户ID。
     * @param String $type 用户首选项的类型。
     * @return Array 首选项列表。
     */
    function getPreferences($userId, $type);
}
?>
